const express  = require('express');

// 引入一个model文件
const User = require('./model/user');

const router = express.Router();


//  CURD

//  增！！！

router.post('/add', async (req,res)=>{


    const {  phone,idNum,addr,userName,pwd } = req.body; // 获取参数

    // 数据的过滤  在对数据库进行操作之前 对于要保存的数据进行过滤
    if(!userName) return  res.send({ success:false, info:'请填写用户名'});
    if( !/^1[3-9]\d{9}$/.test(phone) ) return  res.send({ success:false, info:'请填写一个正确的手机号码'});


    
        //  ORM  通过一个对象(Object)  关联映射(Relation) 一个表(Model)
        // 通过一个 model对象 就可以执行对应的方法  去实现对于数据库的操作
        await User.create({
            phone,
            idNum,
            addr,
            status:1,
            userName,
            pwd
        })
        
    //    res.send({success:true,info:'添加成功'})   可以改写成下面的
       req.success({info:'添加成功'})


})


// 删除  ！！！
router.post('/del', async (req,res)=>{
    const { id } = req.body;
    if(!id) return res.send({success:false,info:'请传入正确的id'})

  

        await User.findByIdAndDelete(id);
        res.send({success:true,info:'删除成功'})

   
})

// 修改
router.post('/update', async (req,res)=>{

    const {  phone,idNum,addr,userName,pwd,id } = req.body; // 获取参数

    // const { ...updateData,id} = req.body; // 思考？ 这有写的目的？？？？

    const updateData  = {}  // 声明一个空对象 传递给api当中进行修改

    // 如果用户传递的参数当中有  phone 我才把phone的参数挂在在updateData
    if(phone) updateData.phone = phone ;
    if(idNum) updateData.idNum = idNum ;
    if(addr) updateData.addr = addr; 
    userName &&  ( updateData.userName = userName );
    
   

    await User.findByIdAndUpdate(id, updateData );
    res.send({success:true,info:'修改成功'})

})


//  查询单个记录
router.post('/getOneById', async (req,res)=>{
    const { id }  = req.body;
    const data =  await User.findById(id);
    req.success({data,info:'查询成功'})
})

router.post('/query', async (req,res)=>{
    const { phone,userName } = req.body;
    const where  = {};
    if(phone) where.phone = phone;
    if(userName) where.userName = userName;

    //  findOne(查询条件)
    let data = await User.findOne(
        where,
        {   // 第二个参数表示对于要查询的字段的过滤
            // pwd:0  //  排除法
            phone:1,  // 包含 要么排除法 要么使用包含法
            userName:1
        }
    )

    req.success({data,info:'查询成功'})

})



// 查询多个

router.post('/queryAll', async (req,res)=>{
    let { phone,userName, page, limit } = req.body;

    // 设置默认值
    page = page || 1;
    limit = limit || 30;
    const skip = (page-1)*limit;

    const where  = {};
    if(phone) where.phone = phone;
    if(userName) where.userName = userName;

    //  find(查询条件, 字段的过滤 ,其他配置项 )
    let data = await User.find(
        where,
        {   // 第二个参数表示对于要查询的字段的过滤
            // pwd:0  //  排除法
            phone:1,  // 包含 要么排除法 要么使用包含法
            userName:1
        },
        {
            // 其他配置项
            skip, // 查询的偏移量(起点)
            limit,

        }
    )

    req.success({data,info:'查询成功'})

})



module.exports = router;